home *** CD-ROM | disk | FTP | other *** search
/ Black Crawling Systems Archive Release 1.0 / Black Crawling Systems Archive Release 1.0 (L0pht Heavy Industries, Inc.)(1997).ISO / blackcrwl / elctrnic / scancode.txt < prev    next >
Text File  |  1996-08-24  |  11KB  |  185 lines

  1.  
  2. Version 0.9a        IBM Keyboard/Scancode FAQ File    Richard STEVEn Walz
  3. rel 10 June 1994     *please retain this banner*      rstevew@armory.com 
  4.  
  5. The IBM keyboard was designed to be completely reconfigurable short of
  6. giving you keycaps with replacable transparencies under a clear top!!!
  7. Any key can be interpreted by a program as anything. They needed more than
  8. the ASCII codes for this (what's the ASCII code for 'left shift" and
  9. 'alt'?!), so they assigned scancodes whose values were arbitrary, except
  10. perhaps from a PC board layout and trace routing or keyboard controller
  11. firmware perspective. Thus these scancodes are sent by the keyboard, in
  12. time to its own clock, both of which go to the 8255 PIA port chip on the
  13. motherboard, after a bit of serial to parallel work by a couple other
  14. chips. 
  15.  
  16. The keyboard clock and data lines are open collector, meaning that they are
  17. pulled up with resistors and can be pulled down by either end of the line
  18. to for communication in either direction. Thus there is a protocol that
  19. each end observes about their logic states.
  20.  
  21. The keyboard monitors the state of the data and clock lines prior to any
  22. send to the computer. If the clock line is LO, (TTL LO or near 0 Volts),
  23. then the keyboard is disabled and will not send. If the clock line is high,
  24. (TTL HI or getting close to but not greater than 5 Volts), and the data
  25. line is LO, then input TO the keyboard is accepted FROM the computer!
  26.  
  27. Finally it should be mentioned that the keyboard only starts a send to
  28. the computer when the data line and the clock line are high. This means that
  29. the computer is not trying to talk to the keyboard or trying to make the
  30. keyboard wait to send. When the two lines are high, since the lines are
  31. open collector and pulled up passively, the keyboard can take them over and
  32. start the clock and pull the data line low. On the falling edge of the
  33. 10 kHz clock, the keyboard again raises the data line to form two start bits
  34. of .2 ms duration, signaling the start of the byte send. Then the bits are
  35. sent in LSB first (D0) and then on up through the eight bit byte to the MSB
  36. (D7), and then the line returns to the LO state!
  37.  
  38. This is an unusual setup compared to most types of serial communications, as
  39. usually the line remains HI when not being pulled LO to make a start bit or
  40. bits, and THEN the data is sent using its correct logical value as a HI '1'
  41. or a LO '0'. Here the data is sent with its logical sense preserved, but
  42. the start bits are suddenly HI from a inactive but ready LO data line, and
  43. the bits are read by timing off the received clock on the clock line, which
  44. is also taken over by the keyboard and pulled LO to signify time to start a
  45. bit, a start bit OR a data bit.
  46.  
  47. The diagram is thus:
  48.  
  49. HI  10 kHz
  50. --------------| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |------------------
  51.   clock line  | | | | | | | | | | | | | | | | | | | | | |  bits start on 
  52. LO            |-| |-| |-| |-| |-| |-| |-| |-| |-| |-| |-|  falling edges
  53.  
  54. HI
  55. -----|        |-------|   |-----------|   |---|
  56.      | data   | start | 0 | 1   1   1 | 0 | 1 | 0   0 
  57. LO   |--------|   |   |---|   |   |   |---|   |---|---|-----------------
  58.        line     s   s  D0  D1  D2  D3  D4  D5  D6  D7   stop/idle 
  59.  
  60. As was noted above, there is a state of the two lines where the computer
  61. can send data to the keyboard, and my documentation on this was more vague.
  62. If anyone can add to it, I would appreciate it. My BTC-5060 "el cheapo"
  63. terminal/AT-type keyboard manual shows a timing diagram which I believe to
  64. be fallacious, as they even have the bits in reverse order. I will want to
  65. test this keyboard with the scope to see the real story. The manual DOES,
  66. however, indicate that this keyboard will correctly operate either an XT or
  67. an AT computer and up, and it truly does! I would like to know how to make
  68. it shift to the other mode and how to control its LED states as well. This
  69. paragraph is a call for more info from out there, and more research on my
  70. part, as I see conflicting information. This should be considered a
  71. preliminary release.
  72.  
  73. This keyboard sends data not just of occurence of a key press and release
  74. but it scans the keyboard keys thousands of times a second and sends data
  75. to the computer as to whether a key has been pressed and whether it has
  76. been released, and in the order these occurred, and it stores this change
  77. data in a buffer waiting to send it as soon as the computer will accept it.
  78. This makes this keyboard extremely configurable, as we always know then
  79. what has occurred and the key presses and releases can be noted with great
  80. complexity and interpreted to our heart's content. All keys are on an equal
  81. footing and are not simply super-shift keys in the case of control, alt, and
  82. shifts. These can be read as well and used in a program. In addition, this
  83. keyboard has the IBM "typematic" action, whereby if a key is held down for
  84. more than the assigned delay, the keyboard resends its 'make' code over and
  85. over till it is released or another key takes its place as the repeater.
  86.  
  87. The scancodes for the XT are each different bytes with the 'make' byte given
  88. one hexadecimal number and the 'break' byte given the same number with its
  89. high bit (MSB) set to "1", thus the break codes are all derivable by adding
  90. 80 hexadecimal to the make code for each key. The codes have nothing to do
  91. with the ASCII value of a character seen on the keycap. They are simply
  92. codes. All values below are hexadecimal, which means to get the decimal,
  93. you can multiply the left number by 16, where the left number is a digit
  94. such that 1, 2, 3, 4, 5, 6, 7, 8, 9,  A,  B, C,   D,  E, and  F really mean
  95. numbers   1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, and 15 in decimal.
  96. Then you take the right digit and convert it straight away and add it to
  97. the multiplication of the left digits's value which was multiplied by 16.
  98. Thus the decimal equivalent for the hexadecimal for C9 is 'C' or 12 times 16,
  99. which is 192, plus '9', which is just 9, to make 201. Likewise 3F converts
  100. to '3' or 3 times 16, which is 48, plus 'F' which is 15, which add to 63.
  101. And once more for good measure, BD converts to decimal thus: 'B' is 11, and
  102. 11 times 16 is 176, and 'D' is 13, so added they make 189. The scancodes
  103. found at port 60H or 96 are the 'make' codes for those keys. In BASIC
  104. language, the first INKEY$ byte is the ASCII interpretation in decimal,
  105. unless there are two bytes for the interpretation of extended characters,
  106. then it is the second. These INKEY$ codes, while often called scancodes
  107. mistakenly, are merely extended keycodes particular to BASIC language.
  108.  
  109.                         The XT Scancodes
  110.  
  111. These are all hexadecimal:              'make' code top / 'break' below
  112.  
  113. F1 F2    `  1  2  3  4  5  6  7  8  9  0  -  =  \ BS   ESC NUML SCRL SYSR 
  114. -----   ---------------------------------------------  ------------------
  115. 3B 3C   29 02 03 04 05 06 07 08 09 0A 0B 0C 0D 2B 0E    01  45   46   ** 
  116. BB BC   A9 82 83 84 85 86 87 88 89 8A 8B 8C 8D AB 8E    81  C5   C6
  117.  
  118. F3 F4   TAB   Q  W  E  R  T  Y  U  I  O  P  [  ]       Home Up  PgUp PrtSc
  119. -----   -----------------------------------------      -------------------
  120. 3D 3E    0F  10 11 12 13 14 15 16 17 18 19 1A 1B        47  48   49   37
  121. BD BE    8F  90 91 92 93 94 95 96 97 98 99 9A 9B        C7  C8   C9   B7
  122.  
  123. F5 F6   CNTL   A  S  D  F  G  H  J  K  L  ;  ' ENTER   Left  5  Right  -
  124. -----   --------------------------------------------   ------------------
  125. 3F 40    1D   1E 1F 20 21 22 23 24 25 26 27 28   1C     4B  4C   4D   4A
  126. BF C0    9D   9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8   9C     CB  CC   CD   CA
  127.  
  128. F7 F8   LSHFT    Z  X  C  V  B  N  M  ,  .  /  RSHFT   End  Dn  PgDn   +
  129. -----   --------------------------------------------   ------------------
  130. 41 42    2A     2C 2D 2E 2F 30 31 32 33 34 35    36     4F  50   51   4E
  131. C1 C2    AA     AC AD AE AF B0 B1 B2 B3 B4 B5    B6     CF  D0   D1   CE
  132.  
  133. F9 F10  ALT                  SPC             CAPLOCK   Ins      Del
  134. ------  --------------------------------------------   -------------
  135. 43 44    38                   39                 3A     52       53
  136. C3 C4    B8                   B9                 BA     D2       D3
  137.  
  138.  
  139. ------------------------------------------
  140. Now I will explain the AT scan codes. They are done slightly differently.
  141. The AT keyboard response is a different set of events. When the key is
  142. pressed, the scan code is sent, and when the key is released, two bytes are
  143. sent, the keyboard sends F0 hex and then the scancode again, thus we will
  144. only need to list the scancodes below for the AT keyboard activity.
  145.  
  146. Now they use a ROM-masked 8049 as the input processor from this AT keyboard
  147. hardware to convert the AT hardware codes coming from the keyboard hardware
  148. back into the old XT scancode set to the internal bus, for purposes of
  149. downward compatibility, surely the work of some fresh idiot graduate
  150. engineer who simply thought he HAD to change SOMETHING!!! This was
  151. generally considered a no-brainer in hardware design circles!!!
  152.  
  153.                            The AT Scancodes
  154.  
  155. Again, these are hexadecimal:
  156.  
  157. F1 F2    `  1  2  3  4  5  6  7  8  9  0  -  =  \ BS   ESC NUML SCRL SYSR 
  158. -----   ---------------------------------------------  ------------------
  159. 05 06   0E 16 1E 26 25 2E 36 3D 3E 46 45 4E 55 5D 66    76  77   7E   84
  160.  
  161. F3 F4   TAB   Q  W  E  R  T  Y  U  I  O  P  [  ]       Home Up  PgUp PrtSc
  162. -----   -----------------------------------------      -------------------
  163. 04 0C    0D  15 1D 24 2D 2C 35 3C 43 44 4D 54 5B        6C  75   7D   7C
  164.  
  165. F5 F6   CNTL   A  S  D  F  G  H  J  K  L  ;  ' ENTER   Left  5  Right  -
  166. -----   --------------------------------------------   ------------------
  167. 03 0B    14   1C 1B 23 28 34 33 38 42 4B 4C 52   5A     6B  73   74   7B
  168.  
  169. F7 F8   LSHFT    Z  X  C  V  B  N  M  ,  .  /  RSHFT   End  Dn  PgDn   +
  170. -----   --------------------------------------------   ------------------
  171. 83 0A     12    1A 22 21 2A 32 31 3A 41 49 4A   59      69  72   7A   79
  172.  
  173. F9 F10  ALT                  SPC             CAPLOCK   Ins      Del
  174. ------  --------------------------------------------   -------------
  175. 01 09    11                   29               58       70       71
  176.  
  177. ----------------------------------
  178. And that's all I know about it. If you would like to add information to
  179. this small tutorial FAQ, please send it to rstevew@armory.com for review
  180. and please don't add to this FAQ and republish it without my consent. I will
  181. keep this up to date if you will be kind and handle it that way. Thanks.
  182. -Steve Walz   rstevew@armory.com
  183.  
  184.  
  185.